package co.com.tye.dataaccess.dao;

import co.com.tye.dataaccess.api.HibernateDaoImpl;
import co.com.tye.modelo.Facultad;
import co.com.tye.modelo.dto.GruposOpcionesDTO;
import co.com.tye.modelo.dto.OpcionesDTO;

import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Scope;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.annotation.Resource;

/**
 * A data access object (DAO) providing persistence and search support for
 * Facultad entities. Transaction control of the save(), update() and delete()
 * operations can directly support Spring container-managed transactions or they
 * can be augmented to handle user-managed Spring transactions. Each of these
 * methods provides additional information for how to configure it for the
 * desired type of transaction control.
 *
 * @see lidis.Facultad
 */
@Scope("singleton")
@Repository("FacultadDAO")
public class FacultadDAO extends HibernateDaoImpl<Facultad, Integer> implements
		IFacultadDAO {
	private static final Logger log = LoggerFactory
			.getLogger(FacultadDAO.class);
	@Resource
	private SessionFactory sessionFactory;

	public static IFacultadDAO getFromApplicationContext(ApplicationContext ctx) {
		return (IFacultadDAO) ctx.getBean("FacultadDAO");
	}

	@Override
	public List<GruposOpcionesDTO> consultarNombresGrupos(int codigo) throws Exception {
		String hql = "SELECT NEW co.com.tye.modelo.dto.GruposOpcionesDTO (G.nombreGrupo,G.idgruposOpciones) FROM Opciones O,GruposOpciones G, Permisos P  "
				+ " WHERE P.facultad.idfacultad="
				+ codigo
				+ " and P.opciones.idopciones=O.idopciones "
				+ " and O.gruposOpciones.idgruposOpciones = G.idgruposOpciones";
		Query query = sessionFactory.getCurrentSession().createQuery(hql);

		List<GruposOpcionesDTO> results = query.list();
		return results;
	}

	@Override
	public List<OpcionesDTO> consultarOpciones(int codigo) throws Exception {
		String hql = "SELECT NEW co.com.tye.modelo.dto.OpcionesDTO( O.nombreOpcion,O.llaveDeAcceso,O.gruposOpciones.idgruposOpciones) "
				+ " FROM Opciones O, Permisos P  "
				+ " WHERE P.facultad.idfacultad ="
				+ codigo
				+ " and P.opciones.idopciones=O.idopciones ";
		Query query = sessionFactory.getCurrentSession().createQuery(hql);
		List<OpcionesDTO> results = query.list();
		return results;
	}
}
